home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / examples / demo / opengl / gllandscape.h.z / gllandscape.h
C/C++ Source or Header  |  2002-04-08  |  2KB  |  93 lines

  1. #ifndef GLLANDSCAPE_H
  2. #define GLLANDSCAPE_H
  3.  
  4. #include <qgl.h>
  5.  
  6. class GLLandscape : public QGLWidget
  7. {
  8.     Q_OBJECT
  9.  
  10. public:
  11.     GLLandscape( QWidget * parent = 0, const char * name = 0 );
  12.     ~GLLandscape();
  13.     
  14. public slots:
  15.     void rotateX( int );
  16.     void rotateY( int );
  17.     void rotateZ( int );
  18.     void zoom( int );
  19.     void fractalize();
  20.     void resetGrid();
  21.     
  22.     void setWireframe( int );
  23.     void setFilled( int );
  24.     void setSmoothShaded( int );
  25.     void setLandscape( int );
  26.     void setGridSize( int );
  27.     
  28.     void toggleWaveAnimation( bool );
  29.  
  30. signals:
  31.     void rotatedX( int );
  32.     void rotatedY( int );
  33.     void rotatedZ( int );
  34.     
  35. protected:
  36.     void paintGL();
  37.     void initializeGL();
  38.     void resizeGL( int w, int h );
  39.     void mousePressEvent( QMouseEvent * );
  40.     void mouseReleaseEvent( QMouseEvent * );
  41.     void mouseMoveEvent( QMouseEvent * );
  42.     void timerEvent( QTimerEvent * );
  43.     void showEvent( QShowEvent * );
  44.     void hideEvent( QHideEvent * );
  45.     
  46.     void drawWireframe();
  47.     void drawFilled();
  48.     void drawSmoothShaded();
  49.     
  50. private:
  51.     enum Axis { XAxis, YAxis, ZAxis };
  52.     enum RenderModes { Wireframe, Filled, SmoothShaded, Landscape };
  53.     enum Views { DefaultView, CurrentView };
  54.  
  55.     void rotate( GLfloat deg, Axis axis );
  56.     void calculateVertexNormals();
  57.     void averageNormals();
  58.     void createGrid( int size );
  59.     void destroyGrid();
  60.     
  61.     RenderModes mode;
  62.     
  63.     typedef struct grid_normals {
  64.     double u[3], l[3];
  65.     } gridNormals;
  66.  
  67.     // Structure used to store the vertex normals for the landscape
  68.     typedef struct avg_normals {
  69.     double n[3];
  70.     } avgNormals;
  71.  
  72.     typedef struct viewMatrix {
  73.     GLfloat model[4][4];      // OpenGL model view matrix for the view
  74.     GLfloat projection[4][4]; // OpenGL projection matrix for the view
  75.     } viewMatrix;
  76.  
  77.     double      ** landscape; // Height field data
  78.     double      ** wave;      // Wave data
  79.     double      ** wt;        // Parameterized wave data
  80.     gridNormals ** normals;
  81.     avgNormals  ** vertexNormals;
  82.     viewMatrix     views[2];
  83.     
  84.     QPoint  oldPos;
  85.     GLfloat oldX, oldY, oldZ;
  86.     bool initFractals;
  87.     int  gridSize, gridHalf;
  88.     bool animationRunning;
  89.     bool mouseButtonDown;
  90. };
  91.  
  92. #endif
  93.